package comp.racer.ip;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.Serializable;
import java.util.List;
import java.util.Scanner;
import java.util.Vector;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

/**
 *
 * @author david
 * @author italo
 */
@Entity
@Table(name = "texto")
public class TextoPersistencia implements Serializable {

//    private List<String> listaPalavras;
    @Id
    @GeneratedValue()
    @Column(name = "id_Texto")
    private Integer id;
    @Column(name = "frase")
    String frase;

    public TextoPersistencia() {
    }

    public TextoPersistencia(String frase) {
        this.frase = frase;
    }

    public void buscaTexto() {

        JpaDao<TextoPersistencia> jpaDao = new JpaDao(TextoPersistencia.class);

        System.out.println("Buscando Textos no ranking...");
        List<TextoPersistencia> textoList = jpaDao.findAll();

        TextoPersistencia textoDaPartida = obterTextoAleatorio(textoList);

        setFrase(textoDaPartida.toString());

        System.out.println("Ranking recuperado!\n");


    /*    Busca texto
    Assinatura do Método: buscaTexto()
    Lógica da Responsabilidade: Busca aleatoriamente um texto no banco de dados
    [SGBD]
     */

    }

    public int getNumeroCaracteres() {
        List<String> listaString = new Vector<String>();
        int nCaracteres = 0;
            String[] arrayStr = getFrase().split("[,; ]+", -1);
            for (String string : arrayStr) {
                nCaracteres +=string.length();
            }


        return nCaracteres;

    }

    public void inicializaTextos() throws FileNotFoundException {
        JpaDao<TextoPersistencia> jpaDao = new JpaDao(TextoPersistencia.class);

        // deletando todos os textos presentes no banco de dados
        List<TextoPersistencia> textosAntigosList = jpaDao.findAll();

        for (TextoPersistencia texto : textosAntigosList) {
            jpaDao.deleteList(textosAntigosList);
        }

        // inserindo os novos textos
        Scanner scanner = new Scanner(new File( System.getProperty("user.dir") + "/textos.txt"));
        scanner.useDelimiter("\n");

        while(scanner.hasNext()) {
            String fraseLida = scanner.next();
            jpaDao.insert(new TextoPersistencia(fraseLida));
        }
    }

    @Override
    public String toString() {
        return getFrase();
    }


    public String getFrase() {
        return frase;
    }

    public void setFrase(String texto) {
        this.frase = texto;
    }

    private TextoPersistencia obterTextoAleatorio(List<TextoPersistencia> textoList) {
        Integer numTextos = textoList.size();
        Double index = Math.random() * (numTextos - 1);
        index = index > 0 ? index : (-1) * index;
        TextoPersistencia textoDaPartida = textoList.get( index.intValue() );
        return textoDaPartida;
    }
}
